import type { AxiosPromise } from "axios";

//实体接口
export interface EntityApi {
  //获取Key.
  getKey(model: EntityModel): EntityKey;
  //分页查询
  findPage?(query: EntityReq): AxiosPromise<EntityPage>;
  //查询列表
  findList?(query: EntityReq): AxiosPromise<EntityList>;
  //查询单个
  findById?(key: EntityKey): AxiosPromise<EntityModel>;
  //新增
  create?(data: EntityCreateReq): AxiosPromise<EntityModel>;
  //修改
  update?(data: EntityUpdateReq): AxiosPromise<EntityModel>;
  //删除
  delete?(key: EntityKey): AxiosPromise<EntityModel>;
  //批量删除
  batchDelete?(keys: EntityKey[]): AxiosPromise<number>;
  //启用禁用Api
  enable?(key: EntityKey, enabled: boolean): AxiosPromise<boolean>;
  //上移下移
  move?(key: EntityKey, up: boolean): AxiosPromise<boolean>;
  //导出模板
  downloadTemplate?(): AxiosPromise;
  //导出Excel
  exportExcel?(data: EntityExportReq): AxiosPromise;
  //导出Pdf
  exportPdf?(data: EntityExportReq): AxiosPromise;
  //导入Excel
  importExcel?(data: EntityImportReq): AxiosPromise<string>;
}

//枚举查询请求
export interface EnumEntryReq {
  //枚举类名称
  className: string;
  //枚举类型(默认0)
  type?: number;
}

//ant 下拉框类型
export interface AntEntry {
  //值
  value: string;
  //文本
  text: string;
}

//Entry
export interface Entry {
  //键
  key: string;
  //值
  value: string;
}

//Lay Entry
export interface LayEntry {
  // Key Value
  value: string;
  // Name
  label: string;
  // 父 Value
  parentId: string;
  // 子节点
  children: LayEntry[];
}

//导出请求
export interface EntityExportReq {
  //导出类型(0:Excel,1:Pdf)
  type: number;
  //导出数据
  data: any;
}

//查询请求
export interface EntityReq {
  // 页数
  curPage?: number;
  // 条数
  pageSize?: number;
  //排序名称
  orderName?: string;
  //是否升序排序
  orderAsc?: boolean;
}

//实体模型
export interface EntityModel {}

//实体列表
export interface EntityList {
  //内容
  results: Array<EntityModel>;
}

// 实体分页
export interface EntityPage {
  //当前页内容
  results: Array<EntityModel>;
  // 页数
  curPage: number;
  // 条数
  pageSize: number;
  //总记录数
  totalSize: number;
  //本页小计
  subTotalDto: EntityTotal;
  //合计
  totalDto: EntityTotal;
}

// 合计
export interface EntityTotal {
  //总记录数
  totalSize: number;
}

// 实体主键
export interface EntityKey {}

//实体主键List
export interface EntityKeyList {}

// 新增实体
export interface EntityCreateReq {
  // 租户
  tenant?: string;
  //用于检测重复请求的唯一字符串ID
  requestId?: string;
  //如果为true，则表示给定的请求仅需要被检验，而不是被执行
  validateOnly?: boolean;
}

// 修改实体
export interface EntityUpdateReq {
  // 租户
  tenant?: string;
  //用于检测重复请求的唯一字符串ID
  requestId?: string;
  //如果为true，则表示给定的请求仅需要被检验，而不是被执行
  validateOnly?: boolean;
  //更新字段掩码.
  updateMask: string;
}

export type EntityFormReq = EntityCreateReq | EntityUpdateReq;

//导出请求
export interface EntityExportReq {
  //标题
  title?: string;
  // 显示文件名
  fileName?: string;
  //查询条件.
  req?: EntityReq;
}

//导入请求
export interface EntityImportReq {
  // 租户
  tenant?: string;
  //用于检测重复请求的唯一字符串ID
  requestId: string;
  //文件名
  fileNames?: string;
  //是否新增标识
  addFlag?: boolean;
  //更新字段掩码.
  updateMask: string;
}
